# ======================================
# MySQL 客户端：客户端连接的默认参数
[client]

# 客户端默认连接的端口
port                   = 3306

# 用于本地连接的MySQL SOCKET套接字文件
socket                 = /tmp/mysql.sock

# 字符集编码
#default-character-set = utf8mb4

# ======================================
# MySQL客户端工具中的行为
[mysql]

# %%%%%%%%%%%%%%%%%%%%
# 参数

# 自动补全
#auto-rehash
no-auto-rehash

# ======================================
# MySQL 导出
[mysqldump]

# %%%%%%%%%%%%%%%%%%%%
# 参数

# 它强制 mysqldump 从服务器查询取得记录直接输出
# 而不是取得所有记录后将它们缓存到内存中
quick

# 限制server接受的数据包大小;
# 指代mysql服务器端和客户端在一次传送数据包的过程当中数据包的大小
max_allowed_packet     = 512M

# 通信缓冲区
# TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行
# 通常不要改变该参数值
# 如果内存不足，可以将它设置为查询期望的大小
# 即客户发出的SQL语句期望的长度
# 如果语句超过了这个长度，那么缓冲区会被自动的扩大
# 直到max_allowed_packet个字节
#net_buffer_length     = 16384

# ======================================
# MySQL 服务端：MySQL服务（安全模式）的参数
[mysqld_safe]

# %%%%%%%%%%%%%%%%%%%%
# 文件

# 错误日志文件
log-error              = /opt/udb/instance/mysql-5.7/xxxxxxxx/log/mysqld.log

# MySQL服务进程文件（PID）
pid-file               = /opt/udb/instance/mysql-5.7/xxxxxxxx/mysqld.pid

# ======================================
# MySQL 服务端：MySQL服务的参数
[mysqld]

# %%%%%%%%%%%%%%%%%%%%
# 目录

# 基本目录 / MySQL安装目录
basedir                = /opt/udb/program/mysql/mysql-5.7.12
# 数据目录
datadir                = /opt/udb/instance/mysql-5.7/xxxxxxxx/data
# 临时目录
tmpdir                 = /opt/udb/instance/mysql-5.7/xxxxxxxx/tmp

secure-file-priv       = /opt/udb/instance/mysql-5.7/xxxxxxxx/tmp

# %%%%%%%%%%%%%%%%%%%%
# 文件

# SOCKET套接字文件
socket                 = /tmp/mysql.sock

# MySQL服务进程文件（PID）
pid-file               = /opt/udb/instance/mysql-5.7/xxxxxxxx/mysqld.pid

# 生成Log日志文件
#general-log-file      = /opt/udb/instance/mysql-5.7/xxxxxxxx/log/mysqld.log

# 错误日志文件
log-error              = /opt/udb/instance/mysql-5.7/xxxxxxxx/log/mysqld.log

# %%%%%%%%%%%%%%%%%%%%
# 参数

# 运行MySQL服务的操作系统用户
user                    = mysql

# MySQL字符集
character_set_server    = utf8

# MySQL服务监听的IP
bind-address            = 127.0.0.1
# MySQL服务监听的端口
port                    = 3306

# 索引快的缓冲区大小
# 对MyISAM表性能影响最大的一个参数.决定索引处理的速度，尤其是索引读的速度
# 默认值是16M
# 通过检查状态值Key_read_requests和Key_reads，可以知道key_buffer_size设置是否合理
key_buffer_size         = 33554432

local_infile            = 1

# 一个查询语句包的最大尺寸
# 消息缓冲区被初始化为net_buffer_length字节
# 但是可在需要时增加到max_allowed_packet个字节
# 该值太小则会在处理大包时产生错误。如果使用大的BLOB列，必须增加该值
# 这个值来限制server接受的数据包大小
# 有时候大的插入和更新会受max_allowed_packet 参数限制，导致写入或者更新失败
max_allowed_packet      = 16777216

# 线程缓存；
# 主要用来存放每一个线程自身的标识信息，如线程id，线程运行时基本信息等等
# 我们可以通过 thread_stack 参数来设置为每一个线程栈分配多大的内存
#thread_stack            = 256K

max_connect_errors      = 1000000
max_connections         = 2000

net_buffer_length       = 8192

# 查询缓存
# 一个SELECT查询在DB中工作后，DB会把该语句缓存下来
# 当同样的一个SQL再次来到DB里调用时
# DB在该表没发生变化的情况下把结果从缓存中返回给Client
# 在数据库写入量或是更新量也比较大的系统，该参数不适合分配过大
# 而且在高并发，写入量大的系统，建系把该功能禁掉
#query_cache_size        = 0

# 决定是否缓存查询结果
# 这个变量有三个取值：0,1,2
# 分别代表了off、on、demand。
query_cache_type         = 0

# MySQL读入缓冲区大小
# 对表进行顺序扫描的请求将分配一个读入缓冲区
# MySQL会为它分配一段内存缓冲区
# read_buffer_size 控制这一缓冲区的大小
# 如果对表的顺序扫描请求非常频繁
# 并且，你认为频繁的扫描进行得太慢
# 可以通过增加该变量，以及内存缓冲区大小，以提高其性能
read_buffer_size        = 262144

# MySQL随机读缓冲区大小
# 当按照任意顺序读取行时（例，按照排序顺序），将分配一个随机读缓冲区
# 进行排序查询的时候，MySQL会首先扫描一遍该缓冲区，避免磁盘搜索，提高查询效率
# 如果需要排序大量数据，可以适当的调高该值
# 但是，MySQL会为每个客户端连接分配该缓冲空间
# 所以应尽量适当设置该值，避免内存开销过大
read_rnd_buffer_size    = 524288

# 多表JOIN操作
# MySQL在完成某些JOIN操作的时候（All Join / Index Join）
# 为了减少参与Join的被驱动表的读取次数以提高性能
# 则需要使用Join Buffer来协助完成Join操作
# 当Join Buffer太小的时候，MySQL不会将该Buffer存入磁盘文件
# 而是先将Join Buffer中的结果集与需要Join的表进行Join操作
# 然后清空Join Buffer中的数据，继续将剩余的结果集写入Join Buffer
# 如此往复
# 这势必会造成被驱动表需要被多次读取
# 成倍增加IO访问，最终导致效率的降低
join_buffer_size        = 16M

# MySQL执行排序使用的缓冲大小
# 如果想要增加order by的速度
# 首先看是否可以让MySQL使用索引，而不是额外的排序阶段
# 如果不能使用索引，则可以增加sort_buffer_size的大小
sort_buffer_size        = 524288

sync_binlog             = 1
table_open_cache        = 128

# 线程池、线程缓存
# 用来缓存空闲的线程，以至于不被销毁
# 如果线程缓存存在空闲的线程，则在需要重新建立连接的时候
# 优先调用线程池中的缓存，很快就能响应连接请求
# 每建立一个连接，都需要一个线程与之匹配
thread_cache_size       = 50

# MySQL支持的SQL语法
sql_mode                = 'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

# %%%%%%%%%%%%%%%%%%%% Replication / Master and Slave

# 服务器ID
server-id               = 2130706433

# --- Master
master_info_repository  = TABLE

# --- Slave
slave-load-tmpdir       = /opt/udb/instance/mysql-5.7/xxxxxxxx/tmp
slave-parallel-type     = LOGICAL_CLOCK
slave_parallel_workers  = 0

# 防止slave进程随着mysql的启动而自动启动
skip-slave-start

# %%%%%%%%%%%%%%%%%%%% BINLOG

# --- 目录

# BINLOG 的位置
log-bin                         = /opt/udb/instance/mysql-5.7/xxxxxxxx/binlog/mysql-bin.log

# BINLOG 索引文件的位置
log-bin-index                   = /data/mysqldata/3307/binlog/mysql-bin.index

# --- 参数

binlog-format                   = ROW
binlog_rows_query_log_events    = 1
expire_logs_days                = 7

log_bin_trust_function_creators = 1
log_error_verbosity             = 3
log_output                      = TABLE
log_slow_admin_statements       = 1
log_timestamps                  = SYSTEM

# 为每个session最大可分配的内存
# 在事务执行过程中用来存储二进制日志（BINLOG）的缓存
max_binlog_cache_size           = 102400

# %%%%%%%%%%%%%%%%%%%% 事件调度

event_scheduler              = ON

# %%%%%%%%%%%%%%%%%%%% DNS 域名解析

skip-name-resolve

# %%%%%%%%%%%%%%%%%%%% MyISAM

# 当对MyISAM表load 大文件时
# 调大：
# myisam_sort_buffer_size
# bulk_insert_buffer_size
# key_buffer_size
# 会极大提升速度

# 对MyISAM表执行：repair table / 创建索引的时候，用以缓存排序索引
# 如果太小，可能会遇到错误【myisam_sort_buffer_size is too small】
# myisam_sort_buffer_size      = 8388608

# 默认8M
# 当对MyISAM非空表执行
# insert … select
# insert … values(…),(…)
# load data infile
# 的时候，会使用树状cache缓存数据，每个thread分配一个
bulk_insert_buffer_size        = 32M

# %%%%%%%%%%%%%%%%%%%% InnoDB

# --- 目录
innodb_data_home_dir           = /opt/udb/instance/mysql-5.7/xxxxxxxx/data
innodb_log_group_home_dir      = /opt/udb/instance/mysql-5.7/xxxxxxxx/data

# --- 参数
innodb_buffer_pool_instances   = 1
innodb_buffer_pool_size        = 484442112
innodb_data_file_path          = ibdata1:100M:autoextend
innodb_file_per_table          = 1
innodb_flush_log_at_trx_commit = 2
innodb_flush_method            = O_DIRECT
innodb_io_capacity             = 2000
innodb_log_buffer_size         = 8388608
innodb_log_file_size           = 512M
innodb_log_files_in_group      = 2
innodb_max_dirty_pages_pct     = 50
innodb_open_files              = 1024
innodb_read_io_threads         = 8
innodb_sort_buffer_size        = 1048576
innodb_thread_concurrency      = 20
innodb_write_io_threads        = 8

# %%%%%%%%%%%%%%%%%%%% Performance Schema
performance_schema                     = 0
performance_schema_max_table_instances = 200

# %%%%%%%%%%%%%%%%%%%% RELAY LOG
relay-log                 = /opt/udb/instance/mysql-5.7/xxxxxxxx/relaylog/mysql-relay.log
relay-log-index           = /data/mysqldata/3307/relay/mysql-relay-bin.index
relay_log_info_repository = TABLE
relay_log_recovery        = 1

# %%%%%%%%%%%%%%%%%%%% Slow Log

# 启用慢查询日志
slow_query_log            = 1

# 超过的时间为1秒
# MySQL能够记录执行时间超过参数【long_query_time】设置值的SQL语句，默认是不记录的。
long_query_time           = 1

# 记录管理语句
log-slow-admin-statements

# 记录没有使用index的查询记录 
log-queries-not-using-indexes

# 慢查询日志的存放位置
slow-query-log-file       = /opt/udb/instance/mysql-5.7/xxxxxxxx/log/mysql-slow.log

# ======================================
# Finished.
